Podstawy szyfrowania
Witam ponownie po udanym artykule o pisaniu edytora graficznego.
W tym arcie przedstawię sposoby szyfrowania tekstu.
Wymagania:
- Borland Delphi (chyba dowolna wersja, ja pracuję na Delphi 5)
- podstawy programowania w Delphi
Dla początkujących polecam Delphi-Kurs Adama Boducha, który
można pobrać ze strony www.4programmers.net oraz FAQ i artykuły z mojej strony http://mick567.webpark.pl/.
Najprostszym, ale jednocześnie najmozolniejszym sposobem szyfrowania tekstu
jest podmienianie jednych znaków drugimi. Posłużę się tutaj
przykładem z mojego pierwszego programu do szyfrowania. Wstaw na formę dwa
TMemo oraz jeden TButton i wklej taki kod do procedury OnClick:
var
S, Code : String;
I, Len : Integer;
begin
S := Memo1.Lines.Text;
Len := Length(S);
for I := 1 to Len do
begin
if (S[i] = 'A') or (S[i] = 'a') then
Code := Code + '!';
if (S[i] = 'B') or (S[i] = 'b') then
Code := Code + '@';
if (S[i] = 'C') or (S[i] = 'c') then
Code := Code + '#';
if (S[i] = 'D') or (S[i] = 'd') then
Code := Code + '0';
if (S[i] = 'E') or (S[i] = 'e') then
Code := Code + '9';
if (S[i] = 'F') or (S[i] = 'f') then
Code := Code + '`';
if (S[i] = 'G') or (S[i] = 'g') then
Code := Code + '$';
if (S[i] = ' ') then
Code := Code + ' ';
if (S[i] = 'H') or (S[i] = 'h') then
Code := Code + '+';
if (S[i] = 'I') or (S[i] = 'i') then
Code := Code + '*';
if (S[i] = 'J') or (S[i] = 'j') then
Code := Code + '=';
if (S[i] = 'K') or (S[i] = 'k') then
Code := Code + '7';
if (S[i] = 'L') or (S[i] = 'l') then
Code := Code + '2';
if (S[i] = 'Ł') or (S[i] = 'ł') then
Code := Code + '&';
if (S[i] = 'M') or (S[i] = 'm') then
Code := Code + 'C';
if (S[i] = 'N') or (S[i] = 'n') then
Code := Code + '/';
if (S[i] = 'O') or (S[i] = 'o') then
Code := Code + '[';
if (S[i] = 'P') or (S[i] = 'p') then
Code := Code + ']';
if (S[i] = 'R') or (S[i] = 'r') then
Code := Code + '\';
if (S[i] = 'S') or (S[i] = 's') then
Code := Code + '(';
if (S[i] = 'T') or (S[i] = 't') then
Code := Code + ')';
if (S[i] = 'U') or (S[i] = 'u') then
Code := Code + '^';
if (S[i] = 'Ó') or (S[i] = 'ó') then
Code := Code + '?';
if (S[i] = 'W') or (S[i] = 'w') then
Code := Code + '<';
if (S[i] = 'Y') or (S[i] = 'y') then
Code := Code + '>';
if (S[i] = 'Z') or (S[i] = 'z') then
Code := Code + ';';
if (S[i] = 'Ż') or (S[i] = 'ż') then
Code := Code + '"';
if (S[i] = 'Ź') or (S[i] = 'ź') then
Code := Code + '{';
if (S[i] = 'Ć') or (S[i] = 'ć') then
Code := Code + '~';
if (S[i] = 'Ś') or (S[i] = 'ś') then
Code := Code + '~';
end;
Memo2.Lines.Clear;
Memo2.SelText := Code;
Ten kod sprawdza kolejno znaki w Memo1 i je podmienia na inne.
Jak już
pisałem, ta metoda jest bardzo prymitywna i bardzo mozolna, na
dodatek nie
ma uwzględnionych cyfr (chociaż można je dopisać) oraz innych
znaków typu
'Char' np: "~`<>/\[]{};:*-+," i wiele, wiele innych (jest ich o
wiele więcej
niż na klawiaturze, około 255).
Teraz będzie nieco bardziej zaawansowana metoda zwana "metodą
xorowania".
Sam nie wiem dokładnie na czym polega ale mogę powiedzieć, że ta
procedura
została wykorzystana przy tworzeniu znanego trojana, jakim
jest
"Prosiak". Oto kod, który należy wkleić pod
napisem 'implementation':
function des(s: string): string;
var
i: integer;
begin
randseed := length(s) * 15;
for i := 1 to length(s) do
begin
s[i] := char(ord(s[i]) xor random(255));
Result := s;
end;
end;
... a używa się jej tak...
Edit1.Text := des('http://mick567.webpark.pl');
Jest jeszcze jedna metoda, którą znam i chciałbym zaprezentować
(potrzebne dwa TEdit i TButton):
var
i : Integer;
txt : String;
znak : char;
kod : byte;
nowy : string[100]='';
begin
txt := Edit1.Text;
for i:=0 to Length(txt) do begin
znak := txt[i]; {256}
kod := byte(znak);
kod := kod -1;
nowy := nowy + chr(kod);
end;
Edit2.Text:=nowy;
nowy:='';
Ten kod sprawdza indeks danego znaku odejmuje od niego 1 i
przetwarza
z powrotem na znak. Do deszyfrowania powstałego tekstu wystarczy
taka
procedura:
var
i : Integer;
txt : String;
znak : char;
kod : byte;
nowy : string[100]='';
begin
txt := Edit1.Text;
for i:=0 to Length(txt) do begin
znak := txt[i]; {256}
kod := byte(znak);
kod := kod +1;
nowy := nowy + chr(kod);
end;
Edit2.Text:=nowy;
nowy:='';
Ta procedura jest podobna do poprzedniej z tym, że tutaj się
dodaje 1 a nie
odejmuje ja poprzednio.
Jakbyście czegoś nie rozumieli to piszcie na hidden3@wp.pl,
zapraszam też do odwiedzenia mojej stronki z chamskimi programami
Na razie!
Autor: Michał Pawluczuk
Mail: hidden3@wp.pl
Website: http://mick567.webpark.pl/
http://www.xlog.prv.pl
GG: 4450067
|